<?php

namespace Common;

use Common\Database\DBPDO;
use Common\Proxy\Proxy;

/**
 * 工厂
 *
 * @author	夏立军
 * @email	m17269@163.com
 * @time	2020年11月13日 14:04:29
 */
class Factory
{
    public static $proxy = null;
    // 创建一个数据库的工厂方法
    public static function getDatabase($type = 'proxy')
    {

        if ($type == 'proxy') {
            if (!self::$proxy) {
                self::$proxy = new Proxy();
            }
            return self::$proxy;
        }

        $key = 'database_' . $type;
        // 选择数据库
        if ($type == 'slave') {
            // 从库
            // 主读
            $config = APP::getInstance()->config['database']['slave'];
            $database_config = $config[array_rand($config)];
        } else {
            // 主库
            // 主库 主 改增删
            $config = APP::getInstance()->config['database']['master'];
            $database_config = $config;
        }

        // 使用注册器模式读取一个数据库连接
        $db = Register::get($key);
        // 
        if (!$db) {
            // 如果没有则重新读取
            $db = new DBPDO();
            $db->connect($database_config['host'], $database_config['user'], $database_config['password'], $database_config['db_name']);
            // 重新注册到树上
            Register::set($key, $db);
        }
        return $db;
    }

    /**
     * @param $name
     * @return Object
     */
    public static function getModel($name)
    {
        $key = 'app_model_' . $name;
        $model = Register::get($key);
        if (!$model) {
            $class = '\\App\\Model\\' . ucwords($name);
            $model = new $class;
            Register::set($key, $model);
        }
        return $model;
    }

    // 创建一个用户工厂方法
    public static function getUser($id)
    {
        $key = 'user_' . $id;
        $user = Register::get($key);
        if (!$user) {
            $user = new User($id);
            Register::set($key, $user);
        }
        return $user;
    }
}
